Skip to main content

CNC-Beispiel 02: Online dekodieren mit Verwendung von Variablen

Sehen Sie hierzu das Beispielprojekt CNC02_online.project im Installationsverzeichnis von CODESYS unter ..\CODESYS SoftMotion\Examples.

Das Beispiel zeigt, wie ein CNC-Programm unter Verwendung von Variablen dekodiert werden kann.

NC-Programm im CNC-Editor erstellen

  1. Erstellen Sie ein Programm CNCOnline mit einer SoftMotion-Steuerung.

  2. Legen Sie eine globale Variablenliste an und deklarieren Sie darin zwei Variablen.

    VAR_GLOBAL
            g_x: REAL:=100;
            g_y:REAL:=50;
    END_VAR
  3. Fügen Sie ein Object CNC-Programm mit dem Namen Example ein.

    Wählen Sie dabei die ImplementierungDin66025 und den ÜbersetzungsmodusSMC_CNC_REF. Dieser Modus ist notwendig, da Sie in Ihrem Programm Variablen verwenden.

  4. Geben Sie folgende Bewegungssätze ein:

    CNC-Editor:

    _sm_img_example_cnc2_1.png

Drive Interface, Steuerungskonfiguration erstellen

Definieren Sie eine Antriebsstruktur wie im Beispiel CNCdirect.

IEC-Programm erstellen

  1. Fügen Sie eine POU (CFC) mit dem Namen Path zur Applikation hinzu.

    Im Programm Path finden die Decodierung des NC-Programms zur OUTQUEUE und die Geschwindigkeitsüberprüfung statt.

    Der Aufruf von SMC_CheckVelocities ist obligatorisch.

    CFC:

    _sm_img_example_cnc2_3.png
  2. Fügen Sie eine POU (CFC) mit dem Namen Ipo zur Applikation hinzu.

    Dieses Programm ist fast identisch mit dem Programm des Beispiels CNCdirect. Der Dateneingang des Interpolators entspricht jedoch nicht CNC-Programmnamen (ADR(Example)), sondern dem OutQueue-Ausgang der bahnvorverarbeitenden Bausteine (checkVel.poqDataOut).

Task für die Bahnvorverarbeitung anlegen

Da Sie den Übersetzungsmodus SMC_CNC_REF gewählt haben, müssen Sie das Decodieren und Bahnvorverarbeiten im IEC-Programm durchführen. Diese Berechnung ist zeitintensiv. Sie muss nicht im Interpolatortakt ausgeführt werden, da pro Decoder-Aufruf ein Wegobjekt erzeugt wird, das typischerweise für viele Interpolatoraufrufe verwendet wird. Sie sollten den Vorgang in eine Task mit niedrigerer Priorität und selteneren Aufrufen auslagern.

  1. Legen Sie eine Task PathTask an.

  2. Legen Sie folgende Parameter fest:

    • Priorität: 10

    • Intervall: T#30ms

  3. Fügen Sie die POU Path zur Task hinzu.

Abbildung 1. Task PathTask
Task PathTask


. Zugrundeliegender Mechanismus:
  • In der langsamen Task wird anfänglich pro Zyklus etwa ein GEOINFO-Objekt erzeugt, das in der OUTQUEUE-Struktur des Decoder-Bausteins gespeichert ist. Ist diese OUTQUEUE voll, pausieren die Bausteine der langsamen Task solange, bis die OUTQUEUE nicht mehr voll ist. Dies ist der Fall, sobald die schnelle Task das erste GEOINFO-Objekt abgearbeitet hat und dieses aus der OUTQUEUE löscht.

  • Dann werden die Bausteine der langsamen Task wieder aktiv und befüllen die OUTQUEUE-Struktur.

  • In der schnellen Task wird pro Zyklus ein Bahnpunkt aus der OUTQUEUE-Struktur, auf die der Eingang DataIn des Interpolators zeigt, berechnet und verarbeitet. Da ein GEOINFO-Objekt in der Regel aus mehreren Bahnpunkten besteht, dauert es einige Zyklen bis das erste GEOINFO-Objekt abgearbeitet ist und vom Interpolator automatisch gelöscht wird.

  • Da das Abarbeiten eines GEOINFO-Objekts im Gegensatz zum Erstellen mehrerer Zyklen dauert, kann die langsame Task seltener aufgerufen werden als die schnelle.

  • Die Taskzeiten müssen jedoch so gewählt werden, dass in der letzten OUTQUEUE der langsamen Task immer genügend GEOINFO-Objekte gelagert sind, so dass kein Data-Underrun auftritt. Dies tritt auf, wenn dem Interpolator aus DataIn keine GEOINFO-Objekte mehr zur Verfügung stehen, und das Bahnende noch nicht erreicht ist. In diesem Fall bremst der Interpolator und bleibt so lange stehen, bis wieder neue Datenelemente verfügbar sind.

Bedien- und Testoberfläche erstellen

Die Visualisierung entspricht dem Beispiel CNCdirect.project. Fügen Sie zusätzlich Templates der neuen Bausteine (SMC_NCDecoder und SMC_CheckVelocities) hinzu. Legen Sie auch für die globalen Variablen g_x und g_y eine Anzeige an, damit Sie deren Funktion später bei der Inbetriebnahme überprüfen können.

Inbetriebnahme

Übersetzen Sie das erstellte Programm und starten sie es. Das Programm führt die CNC-Bewegung aus, sobald der Eingang Execute des Decoders und des Interpolators gesetzt wurde. Wenn Sie die Werte der globalen Variablen ändern, werden diese bei einem Neustart des Decoders übernommen und die Bahn passt sich entsprechend an. Beobachten Sie auch die Funktion des Eingangs Append des Decoders.